def backward(obs_seq, A, B):
    T = len(obs_seq)  # 获取观测序列的长度
    beta = [[0] * pos_tag_count for _ in range(T)]  # 创建一个初始值为 0 的二维列表 beta，用于存储后向算法中的中间结果
    for i in range(pos_tag_count):
        beta[T - 1][i] = 1  # 初始化 beta 的最后一行
    for t in range(T - 2, -1, -1):  # 从倒数第二行开始遍历 beta 中的每一行
        for i in range(pos_tag_count):  # 遍历当前行中的每一个状态
            beta[t][i] = sum(beta[t + 1][j] * A[i][j] * B[j][obs_seq[t + 1]] for j in range(pos_tag_count))  # 计算当前状态的概率
    return beta